/**
 * 图片 URL 处理工具
 */

/**
 * 修复七牛云图片 URL 格式
 * @param url 原始图片 URL
 * @returns 修复后的 URL
 */
export const fixImageUrl = (url?: string): string | undefined => {
  if (!url || typeof url !== 'string') {
    return undefined;
  }

  // 如果不是 HTTP URL，返回 undefined
  if (!url.startsWith('http') && !url.startsWith('/')) {
    return undefined;
  }

  let fixedUrl = url;

  // 修复七牛云 URL 中缺少的文件扩展名点号
  // 匹配多种可能的模式：
  // 1. 32位十六进制字符后直接跟文件扩展名
  // 2. 任意长度的字符串后直接跟常见图片扩展名
  const patterns = [
    /([a-f0-9]{32})(png|jpg|jpeg|gif|webp|bmp|svg)$/i,
    /([a-zA-Z0-9]{20,})(png|jpg|jpeg|gif|webp|bmp|svg)$/i,
  ];

  for (const pattern of patterns) {
    if (pattern.test(fixedUrl)) {
      fixedUrl = fixedUrl.replace(pattern, '$1.$2');
      break;
    }
  }

  // 如果 URL 发生了变化，记录日志
  if (fixedUrl !== url) {
    console.log('Image URL fixed:', { original: url, fixed: fixedUrl });
  }

  return fixedUrl;
};

/**
 * 获取图片加载失败时的默认头像
 */
export const getDefaultAvatar = (): string => {
  return '';
};

/**
 * 创建一个带有错误处理的图片组件属性
 */
export const createImageProps = (src?: string) => {
  const fixedSrc = fixImageUrl(src);

  return {
    src: fixedSrc,
    onError: (e: any) => {
      // 图片加载失败时使用默认头像
      if (e?.target) {
        e.target.src = getDefaultAvatar();
      }
    },
    style: { objectFit: 'cover' as const },
  };
};
